/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package datasource.util;

/**
 *
 * @author Fabian
 */
public final class BitWise {
    //size es el tamaño en bytes de la representacion de la variable de entrada

    public static long toBytes(long input) {
        return input & 0xffffffff;
    }

    public static int toBytes(int input) {
        return input & 0xff;
    }

    public static byte[] intToByteArrayBE(int value) {
        return new byte[]{
                    (byte) (value >>> 24),
                    (byte) (value >>> 16),
                    (byte) (value >>> 8),
                    (byte) value};
    }

    public static byte[] intToByteArrayLE(int value) {
        return new byte[]{
                    (byte) value,
                    (byte) (value >>> 8),
                    (byte) (value >>> 16),
                    (byte) (value >>> 24)};
    }

    public static byte[] longToByteArrayBE(long value) {
        return new byte[]{
                    (byte) (value >>> 56),
                    (byte) (value >>> 48),
                    (byte) (value >>> 40),
                    (byte) (value >>> 32),
                    (byte) (value >>> 24),
                    (byte) (value >>> 16),
                    (byte) (value >>> 8),
                    (byte) value};
    }

    public static byte[] longToByteArrayLE(long value) {
        return new byte[]{
                    (byte) (value),
                    (byte) (value >>> 8),
                    (byte) (value >>> 16),
                    (byte) (value >>> 24),
                    (byte) (value >>> 32),
                    (byte) (value >>> 40),
                    (byte) (value >>> 48),
                    (byte) (value >>> 56)};
    }

    public static int byteArrayToIntLE(byte[] value) {
        int retorno = 0;
        for (int i = 0; i < value.length; i++) {
            retorno += (value[i] & 0xff) << (8 * i);
        }
        return retorno;
    }

    public static long byteArrayToLongLE(byte[] value) {
        long retorno = 0;
        for (int i = 0; i < value.length; i++) {
            retorno += (value[i] & 0xff) << (8 * i);
        }
        return retorno;
    }
}
